# 1 "shellusr.c"
# 1 "/home/diego/sodium/usr//"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "shellusr.c"
# 1 "../include/usr/libsodium.h" 1







# 1 "../include/kernel/syscall.h" 1







# 1 "../include/kernel/signal.h" 1
# 9 "../include/kernel/syscall.h" 2
# 1 "../include/kernel/semaforo.h" 1
# 20 "../include/kernel/semaforo.h"
typedef struct
{
 int inicializado;
 int valor;
 unsigned long int head;
 unsigned long int tail;

 unsigned long int procesosEnCola;

 unsigned long int cola[5];
 unsigned long int pshared;
}semaforo;





typedef struct
{
 int sem_id;
}sem_t;





typedef struct{
 int pshared;
 unsigned int value;
} sem_init_params;


void vFnEncolarProceso(semaforo *sem, unsigned long int uliId);


void vFnInicializaCola(unsigned long int *cola);


int iFnHayProcesoEnEspera(semaforo *sem);


unsigned long int uliFnDesencolarProceso(semaforo *sem);


void vFnInicializarSemaforos();
# 77 "../include/kernel/semaforo.h"
int iFnSemInit(sem_t *sem, int pshared, unsigned int value);
# 86 "../include/kernel/semaforo.h"
int iFnSemClose(sem_t *sem);
# 106 "../include/kernel/semaforo.h"
int iFnSemWait(sem_t *sem);
# 116 "../include/kernel/semaforo.h"
int iFnSemPost(sem_t *sem);

int validaExistenciaSemaforo(sem_t *sem);


int agregarSemaforoAlSistema(int pshared, unsigned int value);

void vFnVerSemaforos();
# 10 "../include/kernel/syscall.h" 2
# 1 "../include/kernel/shm.h" 1
# 18 "../include/kernel/shm.h"
typedef unsigned int size_t;
typedef int key_t;
typedef int bool;


typedef struct _stuMemoriasAtachadas_
{
 bool utilizada;
 int posicionEnShMem;
 int posicionEnAttach;
}stuMemoriasAtachadas;


typedef struct _attach_
{
 int pid;
 void * ptrShAddr;

}attach;


typedef struct _shMem_
{
 key_t key;
 unsigned long int tamanio;
 attach procAtt[5];
 bool declarada;
}shMem;

shMem memoriasCompartidas[5];




int iFnShmGet(key_t key, size_t size);


int iFnShmAt(int shmid, void * shmAddr);


int iFnShmDt(int shmid);

int iFnShmDtProc(int shmid, unsigned int uiPid);
int iFnShmDtAllProc(unsigned int uiPid);

unsigned long ulFnMaxDirShmProc(unsigned int uiPid);

void vFnInicializarShms();
void vFnVerShm();




void vFnCopiarVariablesCompartidas();



void vFnCopiarVariable(void * dest, void * src, size_t tamanio);
# 11 "../include/kernel/syscall.h" 2
# 1 "../include/kernel/tiempo.h" 1







# 1 "../include/kernel/definiciones.h" 1
# 14 "../include/kernel/definiciones.h"
# 1 "../include/usr/tipos.h" 1
# 15 "../include/usr/tipos.h"
typedef unsigned int dword;
typedef unsigned short word;
typedef unsigned char byte;

typedef unsigned char u8;
typedef signed char s8;
typedef unsigned short u16;
typedef signed short s16;
typedef unsigned int u32;
typedef signed int s32;


typedef struct _u80 { unsigned int word[20]; } u80;
# 15 "../include/kernel/definiciones.h" 2
# 62 "../include/kernel/definiciones.h"
char stArgAux[128];
# 9 "../include/kernel/tiempo.h" 2
# 53 "../include/kernel/tiempo.h"
typedef unsigned long int time_t;
typedef unsigned long int clock_t;





typedef struct{

        clock_t tms_utime;


        clock_t tms_stime;


        clock_t tms_cutime;


        clock_t tms_cstime;
} tms;





typedef struct{

        int tz_minuteswest;


        int tz_dsttime;
} timezone;





typedef struct{

        unsigned long int tv_sec;


        unsigned long int tv_usec;
} timeval;





typedef struct{

        timeval it_interval;


        timeval it_value;
} itimerval;





typedef struct{

        int modes;


 long offset;


 long freq;


 long maxerror;


 long esterror;


 int status;


 long constant;


 long precision;


 long tolerance;


 timeval time;


 long tick;
} timex;





typedef struct{

        long int tv_sec;


        long int tv_nsec;
} timespec;
# 12 "../include/kernel/syscall.h" 2
# 195 "../include/kernel/syscall.h"
enum __ptrace_request {
 PTRACE_TRACEME,
 PTRACE_PEEKTEXT,
 PTRACE_PEEKDATA,
 PTRACE_PEEKUSER,
 PTRACE_POKETEXT,
 PTRACE_POKEDATA,
 PTRACE_POKEUSER,
 PTRACE_GETREGS,
 PTRACE_GETFPREGS,
 PTRACE_SETREGS,
 PTRACE_SETFPREGS,
 PTRACE_CONT,
 PTRACE_KILL,
 PTRACE_ATTACH,
 PTRACE_DETACH
};


typedef struct {
 int iPid;
 void *pvAddr;
 void *pvData;
}__ptrace_param;



typedef struct _stuRegs_
{
  long ebx;
  long ecx;
  long edx;
  long esi;
  long edi;
  long ebp;
  long eax;
  int xds;
  int xes;
  long orig_eax;
  long eip;
  int xcs;
  long eflags;
  long esp;
  int xss;
} stuRegs;






long lFnSysExit( int status );
long lFnSysFork();
long lFnSysTest( long num );
long lFnSysRead( int, void *buf, size_t count );
long lFnSysWrite( int, const void *buf, size_t count );
long lFnSysWaitPid( int pid, int *status, int options );
long lFnSysExecve( const char *filename, char *argv[], char *envp[] );
long lFnSysTime( long *t );
long lFnSysGetPid();
long lFnSysKill( int pid, int sig );
long lFnSysGetPPid();
long lFnSysReboot( int flag );
long lFnSysSodiumCallgate(int iOpcion, int iPar1, int iPar2);
long lFnSysBrk(unsigned long);
long lFnSysSBrk(unsigned long);
long lFnSysSemInit( sem_t *sem, sem_init_params * params);
long lFnSysSemPost( sem_t *sem );
long lFnSysSemWait( sem_t *sem );
long lFnSysSemClose( sem_t *sem );
long lFnSysShmGet( key_t key, size_t size );
long lFnSysShmAt( int shmid, void * shmAddr );
long lFnSysShmDt( key_t key );

int iFnSysSumar(int a, int b, int * res);



long lFnSysNice( int );
long lFnSysGetpriority( int, int );
long lFnSysSetpriority( int, int, int );
long lFnSysClone(stuRegs *,int flags);


long lFnSysIdle();



long lFnSysSchedSetParam(int p);
long lFnSysSchedGetParam();
long lFnSysSchedSetScheduler(int p);
long lFnSysSchedGetScheduler();
long lFnSysSchedYield();
long lFnSysSchedGetPriorityMax();
long lFnSysSchedGetPriorityMin();
long lFnSysSchedRrGetInterval();





long lFnSysStime(time_t *newtime);
long lFnSysTimes(tms *ptmsbuffer);
long lFnSysGettimeofday(timeval *ptimervalTp, timezone *ptimezoneTzp);
long lFnSysSettimeofday(timeval *ptimevalTp, timezone *ptimezoneTzp);
long lFnSysGettimer(int iWhich, itimerval *pitimervalValue);
long lFnSysSettimer(int iWhich, itimerval const *pcnitimervalValue, itimerval *ptimervalOvalue);
long lFnSysAdjtimex(timex *ptimexBuffer);
long lFnSysNanosleep(timespec const *pcntimespecRequested_time, timespec *ptimespecRemaining);



long lFnSysPtrace( int request, void *pvDirParam );





unsigned long ulFnSysBrk(unsigned long brk);
# 9 "../include/usr/libsodium.h" 2

# 1 "../include/usr/mem_part_usuario.h" 1







void* malloc(long int);
void* realloc(long int, unsigned long);
int free(long int);
void iFnListar();

long int liHeapEndPorcentajes;

int iFnInicializarHeapUsuario();
# 11 "../include/usr/libsodium.h" 2
# 1 "../include/usr/enviroment.h" 1







int iFnInicializarEnviromentUsuario(char**);
int iFnEnvObtenerValorNumerico(char *);
int iFnEnvCompararVariable(char *, char *);
int iFnEnvCompararValor(char *, char *);
int iFnEnvSet(char* );
int iFnEnvUnSet(char *);
int iFnEnvBuscarPosicion(char *);
int iFnEnvListarEnviroment();
int iFnEnvCompararValorDeVariable(char *, char *);
int iFnEnvObtenerValorNumericoDeVariable(char*);
char** pstFnEnvObtenerEnviroment();

int iEnvSoloLectura;
int iEnviromentInicializado;
int iCantAsignaciones;
char** pstEnviroment;
# 12 "../include/usr/libsodium.h" 2
# 1 "../include/usr/sodstring.h" 1







inline unsigned char* memcpy(unsigned char *ucpDestino,
      unsigned char *ucpOrigen,
      unsigned int uiTamanio);

inline unsigned char* memcero(unsigned char *ucpDirInicio,
                  unsigned int uiTamanio );

int iFnLongitudCadena (const char*);
int iFnStrcmp(const char*, const char*);
int iFnStrlen(const char*);
int iFnStrcpy(char*, const char*);
int iFnNumStrcmp(const char*, const char*);
# 13 "../include/usr/libsodium.h" 2
# 23 "../include/usr/libsodium.h"
extern int errno;






void exit( int iStatus );
int fork();
int read( int iFd, void *vpBuffer, size_t uiTamanio );
int write( int iFd, const void *covpBuffer, size_t uiTamanio );
long systest( long iNumero );
int waitpid( int iPid, int *piStatus, int iOptions );
int execve( const char *stNombreArchivo, char *const argv[], char *const envp[] );
long time( long *liTiempo );
long getpid();
long sodiumcg(int iOpcion, int iPar1, int iPar2);
long lista_porcentajes(int ptrPorcentaje);
long char2int(char* caracter);
int kill( int iPid, int iSignal );
long getppid();
int reboot( int iflag );
int sem_init( sem_t *sem, int pshared, unsigned int value );
int sem_post( sem_t *sem );
int sem_wait( sem_t *sem );
int sem_close( sem_t *sem );
int shmget( key_t key, size_t size );
int shmat( int shmid, void * shmAddr );
int shmdt( int shmid );
int sumar(int a, int b);
long nice(int iIncremento);
long getpriority(int which, int who);
long setpriority(int,int,int);
long clone(int (*fn)(void * args),void * child_stack,int flags, void * arg);


int stime(time_t *newtime);
clock_t times(tms *ptmsBuffer);
int gettimeofday(timeval *ptimevalTp, timezone *ptimezoneTzp);
int settimeofday(timeval *ptimevalTp, timezone *ptimezoneTzp);
int gettimer(int iWhich, itimerval *pitimervalValue);
int settimer(int iWhich, itimerval const *pcnItimervalValue, itimerval *pitimervalOvalue);
int adjtimex(timex *ptimexBuffer);
int nanosleep(timespec const *pcnTimespecRequested_time, timespec *ptimespecRemaining);


int idle();



int sched_setparam( int p);
int sched_getparam();
int sched_setscheduler( int p);
int sched_getscheduler();
int sched_yield();
int sched_get_priority_max();
int sched_get_priority_min();
int sched_rr_get_interval();


int ptrace( int iRrequest, int iPid, void *pvAddr, void *pvData );


unsigned long __brk (unsigned long limite);

unsigned long __sbrk (unsigned long limite);



typedef char* va_list;
# 2 "shellusr.c" 2
# 1 "../include/usr/shellusr.h" 1
# 104 "../include/usr/shellusr.h"
int iFnConvertirCmd(char*);
int iFnObtenerCmd(char*, int*, int*);
int iFnEsCmdShell(const char*);
int iFnMayusculas(char*);
int iFnEjecutarBinario(char*, int);
int iFnSodiumCallgate(int, int, int);
void vFnMenuAyuda();
void vFnMenuSet();
void vFnMenuPlanif();
int iFnFuncionIdle();
void vFnMenuDescUsr(int);
void vFnMenuDumpUsr(int,int);
int iFnCompletarComando(const char*);
void vFnAutocompletar();
char** pstFnObtenerArgumentos(char*);
# 3 "shellusr.c" 2
# 1 "../include/shell/teclado.h" 1
# 509 "../include/shell/teclado.h"
char stBufferShell[256];

char stBufferTeclado[10];






struct _stuKeyCode {
    unsigned char tipo;
    unsigned char ascii;
};

typedef struct _stuKeyCode stuKeyCode;




struct _stuDefinicionTeclado {
    char sCodigo [5];
    char sNombre [25];
    stuKeyCode stashMatrizNormal [128];
    stuKeyCode stashMatrizShifted [128];
    stuKeyCode stashMatrizAltGred [128];
} __attribute__((packed));

typedef struct _stuDefinicionTeclado stuDefinicionTeclado;


void vFnManejadorTecladoShell (unsigned char ucScanCode);
void vFnScanCodeAKeyCode( stuKeyCode*, unsigned char );
void vFnScanCodeExtAKeyCode( stuKeyCode*, unsigned char );
void vFnKeyCodeNumPad( stuKeyCode* );
int iFnTeclaEspecial ( stuKeyCode, unsigned char );
int iFnCombinacionTeclasEspecial( stuKeyCode );
void * pvFnAbrirArchivoKeymap (void);
int iFnCambiaTecladoI(unsigned int);
int iFnCambiaTecladoS(char *);
void vFnListarKeymaps();
char cFnGetChar();
char cFnPausa();

int iCantidadCaracteres;
int iSemaforoBufferTeclado;
int iLlenarIndice;
static int staiVaciarIndice;
# 4 "shellusr.c" 2


 extern unsigned int uiModoMemoria;
 char stBuffer[256];
 char stCmd[256];
 char stCmdTemp[256];
 char stAsignacion[256];
 char stPrintChar[2];
 int iCaracteresIngresados = 0;
 int iTerminal = 0;

int main(){

 char cCaracter;
 int iCaracterLeido;
 int iArgumento, iArgumento2;
 int iCmdReconocido;
 int i;

 iFnImprimir("\nCmd>");


 while (1)
  {
    iCaracterLeido = iFnLeerCaracter(&cCaracter);
    if (iCaracterLeido != -1)
      {

         switch(iCaracterLeido)
          {

            case 60:
                if(iTerminal == 1)
                 {
                   iFnSodiumCallgate(1,0,0);
                   iTerminal = 0;
                 }
                break;

            case 61:
                if(iTerminal == 0)
                 {
                   iFnSodiumCallgate(1,0,0);
                   iTerminal = 1;
                 }
                break;

            case 8:

                if(iCaracteresIngresados > 0)
                  {
                    stPrintChar[0] = (char)iCaracterLeido;
                    stPrintChar[1] = '\0';
                    iFnImprimir("%s",stPrintChar);
                    iCaracteresIngresados--;
      stBuffer[iCaracteresIngresados] = '\0';
                  }
                break;

            case 13:
                iCmdReconocido = 0;
                if(iCaracteresIngresados > 0)
                  {
      iFnObtenerCmd(stCmd, &iArgumento, &iArgumento2);

      if(iFnEsCmdShell("log")) {
        iFnSodiumCallgate(1,0,0);
        iCmdReconocido = 1;
         }

      if(iFnEsCmdShell("ayuda")) {
        vFnMenuAyuda();
        iCmdReconocido = 1;
         }

      if(iFnEsCmdShell("cls")) {
        iFnSodiumCallgate(3,0,0);
        iCmdReconocido = 1;
         }

      if(iFnEsCmdShell("gdt")) {
        iFnSodiumCallgate(4,iArgumento,0);
        iCmdReconocido = 1;
         }

      if(iFnEsCmdShell("gdtall")) {
        for(i=0;i<20;i++)
          {
         iFnImprimir("\nPosicion de GDT: %d",i);
         iFnSodiumCallgate(4,i,0);
         iFnImprimir("\nPresione Cualquier tecla para continuar, o \"s\" para salir..."); while (iCaracterLeido == -1) { iCaracterLeido = iFnLeerCaracter(&cCaracter); if(iCaracterLeido == 115) { iFnSodiumCallgate(2,0, 7); i=20; } } iCaracterLeido = -1;;
          }
        iCmdReconocido = 1;
         }

      if(iFnEsCmdShell("verShm")) {
        iFnSodiumCallgate(5,iArgumento,0);
        iCmdReconocido = 1;
         }

      if(iFnEsCmdShell("verSem")) {
        iFnSodiumCallgate(6,iArgumento,0);
        iCmdReconocido = 1;
         }

      if(iFnEsCmdShell("sysgetpid")) {
        iFnSodiumCallgate(7,iArgumento,0);
        iCmdReconocido = 1;
         }

      if(iFnEsCmdShell("sysgetppid")) {
        iFnSodiumCallgate(8,iArgumento,0);
        iCmdReconocido = 1;
         }

      if(iFnEsCmdShell("segs")) {
        iFnSodiumCallgate(11,0,0);
        iCmdReconocido = 1;
         }

      if(iFnEsCmdShell("mem")) {
        iFnSodiumCallgate(12,0,0);
        iCmdReconocido = 1;
         }

      if(iFnEsCmdShell("reboot")) {
        iFnImprimir("Reiniciando el sistema...");
        iFnSodiumCallgate(9,0,0);
        iCmdReconocido = 1;
         }

      if(iFnEsCmdShell("bitmap")) {
       iFnSodiumCallgate(13,0,0);
       iCmdReconocido = 1;
      }

      if(iFnEsCmdShell("idt")) {
        iFnSodiumCallgate(14,iArgumento,0);
        iCmdReconocido = 1;
      }

      if(iFnEsCmdShell("idtall")) {
        for(i=0;i<512;i++)
        {
         iFnImprimir("\nPosicion de IDT: %d",i);
           iFnSodiumCallgate(14,i,0);
           iFnImprimir("\nPresione Cualquier tecla para continuar, o \"s\" para salir..."); while (iCaracterLeido == -1) { iCaracterLeido = iFnLeerCaracter(&cCaracter); if(iCaracterLeido == 115) { iFnSodiumCallgate(2,0, 7); i=512; } } iCaracterLeido = -1;;
        }
       iCmdReconocido = 1;
      }

      if(iFnEsCmdShell("yield")) {
        iFnImprimir("\nEl shell cede la ejecucion\n");
        iFnSodiumCallgate(15,0,0);
        iCmdReconocido = 1;
      }

      if(iFnEsCmdShell("set")) {
        iFnEnvListarEnviroment();
        iCmdReconocido = 1;
      }

       if(iFnEsCmdShell("pag")) {
        iFnSodiumCallgate(16,iArgumento,0);
        iCmdReconocido = 1;
      }

      if(iFnEsCmdShell("tss")) {
        iFnSodiumCallgate(17,iArgumento,0);
        iCmdReconocido = 1;
      }

      if(iFnEsCmdShell("stack")) {
        iFnSodiumCallgate(18,iArgumento,iArgumento2);
        iCmdReconocido = 1;
      }

      if(iFnEsCmdShell("listporc")) {
        iFnSodiumCallgate(48,0,0);
        iCmdReconocido = 1;
      }

      if(iFnEsCmdShell("borrarpf")) {
        iFnSodiumCallgate(49,0,0);
        iCmdReconocido = 1;
      }

      if(iFnEsCmdShell("exec")) {
        iFnSodiumCallgate(19,iArgumento,iArgumento2);
        iCmdReconocido = 1;
      }

      if(iFnEsCmdShell("planif")) {
        vFnMenuPlanif();
        iCmdReconocido = 1;
      }



      if(iFnEsCmdShell("leer")) {
        iFnTomaPrimerPara();
        iFnSodiumCallgate(22,(int)stCmd,0);
        iCmdReconocido = 1;
      }

      if(iFnEsCmdShell("dump")) {
        vFnMenuDumpUsr(iArgumento,iArgumento2);

        iCmdReconocido = 1;
      }

      if(iFnEsCmdShell("cd")) {
        iFnTomaPrimerPara();
        iFnSodiumCallgate(25,(int)stCmd,0);
        iCmdReconocido = 1;
      }

      if(iFnEsCmdShell("ls")) {
        iFnTomaPrimerPara();
        iFnSodiumCallgate(26,(int)stCmd,0);
        iCmdReconocido = 1;
      }

      if(iFnEsCmdShell("listaesp")) {
        iFnTomaPrimerPara();
        iFnSodiumCallgate(52,0,0);
        iCmdReconocido = 1;
      }

      if(iFnEsCmdShell("rm")) {
        iFnTomaPrimerPara();
        iFnSodiumCallgate(27,(int)stCmd,0);
        iCmdReconocido = 1;
      }

      if(iFnEsCmdShell("write")) {
        char stAux[256];
        iFnTomaPrimerPara();
          iFnTomaNParametro(2,stAux);
        iFnSodiumCallgate(28,(int)stCmd,(int)stAux);
        iCmdReconocido = 1;
      }

      if(iFnEsCmdShell("kill")) {
       iFnSodiumCallgate(24,iArgumento,0);
       iCmdReconocido = 1;
      }

      if(iFnEsCmdShell("syskill")) {
       if (iArgumento != 0) {
        if (iArgumento2 != 0) {
         iFnImprimir("\n Enviando la sig %d al proceso %d...",iArgumento2,iArgumento);

         if (iFnSodiumCallgate(21,iArgumento,iArgumento2))
          iFnImprimir("ERROR (PID o SIG invalido)");
         else
          iFnImprimir("OK");
        }
        else {
         iFnImprimir("\n Error, falta el numero de sig (ver ayuda)");
        }
       }
       else {
        iFnImprimir("\n uso: syskill PID SIG");
        iFnImprimir("\n SIG: ");
        iFnImprimir("\n  SIGFPE  ");
        iFnImprimirNumero(8);
        iFnImprimir("\n  SIGSEGV ");
        iFnImprimirNumero(11);
        iFnImprimir("\n  SIGINT  ");
        iFnImprimirNumero(2);
        iFnImprimir("\n  SIGSTOP ");
        iFnImprimirNumero(19);
        iFnImprimir("\n  SIGCONT ");
        iFnImprimirNumero(18);
        iFnImprimir("\n  SIGKILL ");
        iFnImprimirNumero(9);
        iFnImprimir("\n  SIGTERM ");
        iFnImprimirNumero(15);
       }
       iCmdReconocido = 1;
      }




      if(iFnEsCmdShell("check")) {
        char stAux[256];
        char stAux2[256];
        int iAux[2];
        iFnTomaPrimerPara();
        iFnTomaNParametro(2,stAux);
        iFnTomaNParametro(3,stAux2);
        iAux[0]=(int)stAux;
        iAux[1]=(int)stAux2;
        iFnSodiumCallgate(29,(int)stCmd,iAux);
        iCmdReconocido = 1;
         }

      if(iFnEsCmdShell("syswaitpid")) {
        iFnSodiumCallgate(30,iArgumento,0);
        iCmdReconocido = 1;
         }

      if(iFnEsCmdShell("lote")) {
        char stAux[256];
        char stAux2[256];
        int iAux[2];
        iFnTomaPrimerPara();
        iFnTomaNParametro(2,stAux);
        iFnTomaNParametro(3,stAux2);
        iAux[0]=(int)stAux;
        iAux[1]=(int)stAux2;
        iFnSodiumCallgate(31,(int)stCmd,iAux);
        iCmdReconocido = 1;
         }

      if(iFnEsCmdShell("pcb")) {
        iFnSodiumCallgate(32,iArgumento,0);
        iCmdReconocido = 1;
         }

      if(iFnEsCmdShell("idle")) {
        iFnFuncionIdle();
        iCmdReconocido = 1;
         }

      if(iFnEsCmdShell("desc")) {
        iFnTomaPrimerPara();
        vFnMenuDescUsr((int)stCmd);

        iCmdReconocido = 1;
         }

      if(iFnEsCmdShell("ejecutar")) {
        iFnTomaPrimerPara();
        iFnSodiumCallgate(35,(int)stCmd,0);
        iCmdReconocido = 1;
         }

      if(iFnEsCmdShell("exit")) {
       return 0;
         }

      if(iFnEsCmdShell("fd")) {
        iFnSodiumCallgate(36,0,0);
        iCmdReconocido = 1;
         }

      if(iFnEsCmdShell("sumafpu")) {
        char stAux[256];
        iFnTomaPrimerPara();
        iFnTomaNParametro(2,stAux);
        iFnSodiumCallgate(37,(int)stCmd,(int)stAux);
        iCmdReconocido = 1;
         }

      if(iFnEsCmdShell("ver")) {
        iFnSodiumCallgate(38,0,0);
        iCmdReconocido = 1;
         }

      if(iFnEsCmdShell("listpart")) {
        iFnSodiumCallgate(47,0,0);
        iCmdReconocido = 1;
         }

      if(iFnEsCmdShell("resetpf")) {
        iFnSodiumCallgate(53,0,0);
        iCmdReconocido = 1;
         }

      if(iFnEsCmdShell("winm")) {
        iFnSodiumCallgate(39,0,0);
        iCmdReconocido = 1;
         }

      if(iFnEsCmdShell("interval")) {
       iFnSodiumCallgate(40,0,0);
       iCmdReconocido = 1;
       }

      if(iFnEsCmdShell("cambiateclado")) {
       iFnSodiumCallgate(41,iArgumento,0);
       iCmdReconocido = 1;
       }

      if(iFnEsCmdShell("agregarpf")) {
           iFnTomaPrimerPara();
       iFnSodiumCallgate(50,(int)stCmd,0);
       iCmdReconocido = 1;
       }



      if(iCmdReconocido == 0)
        {

       i = 0;
       while(stCmd[i] != '\0' && stCmd[i] != ' ' && stCmd[i] != '=') i++;
       if(stCmd[i] == '=')
        {
          i = 0;
          while(stCmd[i] != ' ' && stCmd[i] != '\0') { stAsignacion[i] = stCmd[i]; i++;}
          stAsignacion[i] = '\0';

          if(iFnEnvSet(stAsignacion) == -1) iFnImprimir("\nShell: No se pudo agregar la asignacion al Enviroment.");
        }
          else
        {
        iFnMayusculas(stCmd);



        iFnEjecutarBinario(stCmd, iArgumento);
       }
        }


      stBuffer[0] = '\0';
     }

    for(i = 0; i < 255; i++){ stCmd[i] = '\0'; stBuffer[i] = '\0'; stCmdTemp[i] = '\0';}
    iCaracteresIngresados = 0;
    iFnImprimir("\nCmd>");
                break;

   case 15:

                vFnAutocompletar();
                break;


    default:
    if(iTerminal == 0 && !(iCaracterLeido == 250 || iCaracterLeido == 253 || iCaracterLeido == 251 || iCaracterLeido == 252 ) )
      {
       if(iCaracterLeido == '?') iCaracterLeido = '=';
    stBuffer[iCaracteresIngresados] = (char)iCaracterLeido;
     stPrintChar[0] = stBuffer[iCaracteresIngresados];
     stPrintChar[1] = '\0';
     iCaracteresIngresados++;
     stBuffer[iCaracteresIngresados] = '\0';
     iFnImprimir("%s",stPrintChar);
      }
    if(iTerminal == 1)
      {
    iFnSodiumCallgate(46,iCaracterLeido,0);
      }


          }
      }
   }

 return -1;

}






int iFnMayusculas(char *stCadena)
 {
   int i;
   i = 0;
   while (stCadena[i] != '\0')
     {
      if(((int)stCadena[i] >= 97) && ((int)stCadena[i] <= 122)) stCadena[i] -= 32;
      i++;
     }
    stCadena[i++] = '.';
    stCadena[i++] = 'B';
    stCadena[i++] = 'I';
    stCadena[i++] = 'N';
    stCadena[i] = '\0';
    return 0;
}
# 494 "shellusr.c"
void iFnTomaPrimerPara() {
 int iN=0,iJ=0;
 stCmd[0]='\0';

 while(stBuffer[iN]!=' '&&stBuffer[iN]!='\0')
 {
    iN++;
 }

 if(stBuffer[iN] == '\0')
 {
  return;
 }

 iN++;

 while(stBuffer[iN]!=' '&&stBuffer[iN]!='\t'&&stBuffer[iN]!='\0')
 {
  stCmd[iJ]=stBuffer[iN];
  iJ++;
  iN++;
 }
 stCmd[iJ]='\0';
}
# 527 "shellusr.c"
void iFnTomaNParametro(int iPos,char * stAux) {
 int iN=0,iJ,iI;
 stAux[0]='\0';

 while(stBuffer[iN]!=' '&&stBuffer[iN]!='\0')
 {
   iN++;
 }

 if(stBuffer[iN] == '\0')
 {
  return;
 }

 for(iI=0; iI<iPos; iI++)
   {
      iN++;
      iJ=0;
  while(stBuffer[iN]!=' '&&stBuffer[iN]!='\t'&&stBuffer[iN]!='\0')
  {
   stAux[iJ]=stBuffer[iN];
   iJ++;
   iN++;
  }
   }
 stAux[iJ]='\0';
}
# 565 "shellusr.c"
int iFnEjecutarBinario(char *stBinario, int iArgumento)
 {
    int iPid_Hijo = 0;
    int iShellActivo;
 long int liHeapSize;
    int i;

    char** pstArgv;
 char** pstEnvp;


    pstArgv = pstFnObtenerArgumentos(stBuffer);
    if(pstArgv == -1) return -1;



 pstEnvp = pstFnEnvObtenerEnviroment();
    if(pstEnvp == -1) return -1;




   liHeapSize = iFnEnvObtenerValorNumericoDeVariable("TamanioHeapUsuario");
   if(liHeapSize <= 0)
     {
     iFnImprimir("\n[!] Variable de entorno \"TamanioHeapUsuario\" no esta definida, utilizando tamanio de heap por defecto (100kb)");
  iFnSodiumCallgate(51,100000,0);

  }
   iFnSodiumCallgate(51,liHeapSize,0);

   iPid_Hijo = fork();


     if(iPid_Hijo == 0) {
        if(execve(stBinario,pstArgv,pstEnvp) < 0) exit(1);
     }

    iShellActivo = iFnEnvCompararValorDeVariable("ModoShell","PASIVO");

    if(iShellActivo == 0) waitpid(iPid_Hijo,0,0);

    return 0;

 }
# 621 "shellusr.c"
int iFnObtenerCmd(char *stComando, int *iArgumento, int *iArgumento2)
{
 char stArg[16];

 int iN = 0, iJ = 0, iK = 0;

 if (iCaracteresIngresados > 0) {

           while (((stBuffer[iN] == ' ') || (stBuffer[iN] == '\t')) && iN < 256)
  {
   iN++;
  }

  if (iN < 256)


  {
   while ((stBuffer[iN] != ' ')
          && (stBuffer[iN] != '\t')
          && (stBuffer[iN] != '\0'))
                        {

          stComando[iJ] = stBuffer[iN];
    iN++;
    iJ++;
   }
                    stComando[iJ] = '\0';
  }
  iJ = 0;
         iN++;
  if(iN < 256)
  {
   while((stBuffer[iN] != ' ') && (stBuffer[iN] != '\t') && (stBuffer[iN] != '\0'))
   {
    stArg[iJ]=stBuffer[iN];
    iN++;
    iJ++;
   }
   stArg[iJ]='\0';
  }



     *iArgumento = iFnHtoi(stArg);
 iN++;
 iJ = 0;
  if(iN < 256)
  {
   while((stBuffer[iN] != ' ') && (stBuffer[iN] != '\t') && (stBuffer[iN] != '\0'))
   {
    stArg[iJ]=stBuffer[iN];
    iN++;
    iJ++;
   }
   stArg[iJ]='\0';
  }
      *iArgumento2 = iFnCtoi(stArg);

 }
  return 0;

}
# 691 "shellusr.c"
int iFnEsCmdShell(const char* stComando)
{
  int i = 0;
  int j = 0;
  while(stComando[i] == stCmd[i]) i++;
  while(stComando[j] != '\0') j++;
  if (i == j+1) return 1;
  return 0;
}
# 709 "shellusr.c"
int iFnFuncionIdle(){
        iFnImprimir("\nLlamando a la tarea nula... ");
 return idle();
}







void vFnMenuAyuda()
{

        char cCaracter;
        int iCaracterLeido;

        iCaracterLeido = -1;
        cCaracter = '\0';

        iFnSodiumCallgate(3,0,0);
 iFnImprimir("\nSistemas Operativos - UNLaM");
 iFnImprimir
     ("\n-------------------------------------------------------------------------------");
 iFnImprimir("\nCOMANDOS GENERALES");
 iFnSodiumCallgate(2,0, 15);
 iFnImprimir("\nCmd>cls");
 iFnSodiumCallgate(2,0, 7);
 iFnImprimir("\nLimpia la pantalla");
 iFnSodiumCallgate(2,0, 15);
 iFnImprimir("\nCmd>desc [indice]");
 iFnSodiumCallgate(2,0, 7);
 iFnImprimir
     ("\nDireccion donde se encuentra el descriptor indicado");
 iFnSodiumCallgate(2,0, 15);
 iFnImprimir("\nCmd>dump [desde] [len]");
 iFnSodiumCallgate(2,0, 7);
 iFnImprimir
     ("\nRealiza un vuelco de memoria en pantalla. \nIndicar Direccion inicial y cantidad de words");
 iFnSodiumCallgate(2,0, 15);
 iFnImprimir("\nCmd>exec [opcion] [tam] [prioridad]");
 iFnSodiumCallgate(2,0, 7);
 iFnImprimir("\nCrea un proceso. Indicar su tamanio en bytes");
 iFnSodiumCallgate(2,0, 15);
 iFnImprimir
     ("\nCmd>Execve [nombre_archivo] [parametros] [tam_bss] [prioridad]");
 iFnSodiumCallgate(2,0, 7);
 iFnImprimir
     ("\nCrea un proceso a partir de un programa de prueba compilado en \nforma independiente. Indicar tamanio de BSS en bytes");
 iFnSodiumCallgate(2,0, 15);
 iFnImprimir("\nPresione Cualquier tecla para continuar, o \"s\" para salir..."); while (iCaracterLeido == -1) { iCaracterLeido = iFnLeerCaracter(&cCaracter); if(iCaracterLeido == 115) { iFnSodiumCallgate(2,0, 7); iCaracterLeido = -1; return 0; } } iCaracterLeido = -1; iFnSodiumCallgate(3,0,0);;


 iFnSodiumCallgate(2,0, 15);
 iFnImprimir("\nCmd>gdt");
 iFnSodiumCallgate(2,0, 7);
 iFnImprimir
     ("\nMuestra el contenido de las primeras 20 posiciones en la GDT");
 iFnSodiumCallgate(2,0, 15);
 iFnImprimir("\nCmd>idt");
 iFnSodiumCallgate(2,0, 7);
 iFnImprimir("\nMuestra el contenido de la IDT");
 iFnSodiumCallgate(2,0, 15);
 iFnImprimir("\nCmd>kill [pid]");
 iFnSodiumCallgate(2,0, 7);
 iFnImprimir("\nRemueve el proceso de la memoria. Indicar Pid");
 iFnSodiumCallgate(2,0, 15);
 iFnImprimir("\nCmd>mem");
 iFnSodiumCallgate(2,0, 7);
 iFnImprimir
     ("\nMuestra la cantidad de Memoria base y total del sistema");
 iFnSodiumCallgate(2,0, 15);
 iFnImprimir("\nCmd>ps");
 iFnSodiumCallgate(2,0, 7);
 iFnImprimir("\nLista los Procesos en memoria y su estado");
 iFnSodiumCallgate(2,0, 15);
 iFnImprimir("\nCmd>stack [pid] [ring 0-2]");
 iFnSodiumCallgate(2,0, 7);
 iFnImprimir
     ("\nMuestra el contenido del stack del proceso y ring de ejecucion especificado.");
 iFnSodiumCallgate(2,0, 15);
 iFnImprimir("\nCmd>tss [pid]");
 iFnSodiumCallgate(2,0, 7);
 iFnImprimir
     ("\nMuestra el contenido de la TSS y PCB del proceso indicado");

 iFnSodiumCallgate(2,0, 15);
 iFnImprimir("\nPresione Cualquier tecla para continuar, o \"s\" para salir..."); while (iCaracterLeido == -1) { iCaracterLeido = iFnLeerCaracter(&cCaracter); if(iCaracterLeido == 115) { iFnSodiumCallgate(2,0, 7); iCaracterLeido = -1; return 0; } } iCaracterLeido = -1; iFnSodiumCallgate(3,0,0);;


 iFnSodiumCallgate(2,0, 15);
 iFnImprimir("\nCmd>syskill [pid] [sig]");
 iFnSodiumCallgate(2,0, 7);
 iFnImprimir
     ("\nEnvia una senial a un proceso determinado.Seniales soportadas:\n SIGSTOP, SIGCONT, SIGKILL, SIGTERM, SIGALARM");
 iFnSodiumCallgate(2,0, 15);
 iFnImprimir("\nCmd>ver");
 iFnSodiumCallgate(2,0, 7);
 iFnImprimir("\nVersion del sistema operativo");
 iFnSodiumCallgate(2,0, 15);
 iFnImprimir("\nCmd>winm");
 iFnSodiumCallgate(2,0, 7);
 iFnImprimir
     ("\nOculta o restaura la ventana de procesos de usuario");
 iFnSodiumCallgate(2,0, 15);
 iFnImprimir("\nCmd>ls");
 iFnSodiumCallgate(2,0, 7);
 iFnImprimir
     ("\nMuestra los archivos presentes en el directorio actual");
 iFnSodiumCallgate(2,0, 15);
 iFnImprimir("\nCmd>reboot");
 iFnSodiumCallgate(2,0, 7);
 iFnImprimir("\nReinicia el sistema");
 iFnSodiumCallgate(2,0, 15);
 iFnImprimir("\nCmd>set");
 iFnSodiumCallgate(2,0, 7);
 iFnImprimir("\nImprime la lista de Variables de entorno");
    iFnImprimir("\nPara crear una variable de entorno debe usarse la siguiente sintaxis");
 iFnImprimir("\nVARIABLE=VALOR");
 iFnImprimir("\nPara borrar una variable de entorno debe usarse la siguiente sintaxis");
 iFnImprimir("\nVARIABLE=\nDejando vacia la parte derecha de la asignacion");
 iFnSodiumCallgate(2,0, 15);
 iFnImprimir("\nPresione Cualquier tecla para continuar, o \"s\" para salir..."); while (iCaracterLeido == -1) { iCaracterLeido = iFnLeerCaracter(&cCaracter); if(iCaracterLeido == 115) { iFnSodiumCallgate(2,0, 7); iCaracterLeido = -1; return 0; } } iCaracterLeido = -1; iFnSodiumCallgate(3,0,0);;

 iFnSodiumCallgate(2,0, 15);
 iFnImprimir("\nCmd>planif [subcomando] [parametros]");
 iFnSodiumCallgate(2,0, 7);
 iFnImprimir
     ("\nPermite la modificacion del algoritmo de planificacion.\nDependiendo del subcomando"
      " seleccionado, se obtienen diferentes resultados.\nTipee [planif ayuda] o [planif] para mas informacion");

 iFnSodiumCallgate(2,0, 15);
 iFnImprimir("\nCmd>lote [subcomando] [parametros]");
 iFnSodiumCallgate(2,0, 7);
 iFnImprimir
     ("\nPermite la creacion de conjuntos de procesos que se dispararan\nde forma simultanea.\n"
      "Dependiendo del subcomando seleccionado, se obtienen diferentes resultados.\nTipee [lote ayuda] o [lote] para mas informacion");
 iFnSodiumCallgate(2,0, 15);
 iFnImprimir("\nCmd>sumafpu numero1 numero");
 iFnSodiumCallgate(2,0, 7);
 iFnImprimir("\nSuma dos numeros flotantes y muestra el resultado por pantalla");

 iFnSodiumCallgate(2,0, 15);
 iFnImprimir("\nCmd>cambiateclado [NUMERO_DISTRIBUCION | CODIGO_DISTRIBUCION]");
 iFnSodiumCallgate(2,0, 7);
 iFnImprimir("\nCambia la configuracion del teclado. Si se ejecuta sin parametros muestra las distribuciones disponibles");
 iFnSodiumCallgate(2,0, 15);
 iFnImprimir("\nPresione Cualquier tecla para continuar, o \"s\" para salir..."); while (iCaracterLeido == -1) { iCaracterLeido = iFnLeerCaracter(&cCaracter); if(iCaracterLeido == 115) { iFnSodiumCallgate(2,0, 7); iCaracterLeido = -1; return 0; } } iCaracterLeido = -1; iFnSodiumCallgate(3,0,0);;


 iFnSodiumCallgate(2,0, 15);
 iFnImprimir("\nCmd>ejecutar ARCHIVO");
 iFnSodiumCallgate(2,0, 7);
 iFnImprimir("\nEjecuta ARCHIVO.BIN (se debe omitir la extension en la invocacion). Si el archivo pasado por parametro no es un ejecutable correctamente compilado, los resultados son impredecibles");

 iFnSodiumCallgate(2,0, 15);


iFnSodiumCallgate(2,0, 15);
 iFnImprimir("\nCmd>listpart");
 iFnSodiumCallgate(2,0, 7);
 iFnImprimir("\nLista las particiones activas, su tamanio y si estan utilizadas o libres.");

iFnSodiumCallgate(2,0, 15);
 iFnImprimir("\nCmd>listporc");
 iFnSodiumCallgate(2,0, 7);
 iFnImprimir("\nLista los porcentajes de asignacion para usuario de tamanios de particion fija proporcional");

iFnSodiumCallgate(2,0, 15);
 iFnImprimir("\nCmd>borrarpf");
 iFnSodiumCallgate(2,0, 7);
 iFnImprimir("\nBorra la ultima entrada en la lista de porcentajes para particiones fijas proporcionales para usuario");
iFnImprimir("\nPresione Cualquier tecla para continuar, o \"s\" para salir..."); while (iCaracterLeido == -1) { iCaracterLeido = iFnLeerCaracter(&cCaracter); if(iCaracterLeido == 115) { iFnSodiumCallgate(2,0, 7); iCaracterLeido = -1; return 0; } } iCaracterLeido = -1; iFnSodiumCallgate(3,0,0);;
iFnSodiumCallgate(2,0, 15);
 iFnImprimir("\nCmd>agregarpf PORCENTAJE");
 iFnSodiumCallgate(2,0, 7);
 iFnImprimir("\nAgrega una entrada en la lista de porcentajes para particiones fijas proporcionales para usuario");

iFnSodiumCallgate(2,0, 15);
 iFnImprimir("\nCmd>listaesp");
 iFnSodiumCallgate(2,0, 7);
 iFnImprimir("\nMuestra la lista de programas esperando por tener memoria para iniciarse.");

iFnSodiumCallgate(2,0, 15);
 iFnImprimir("\nCmd>exit");
 iFnSodiumCallgate(2,0, 7);
 iFnImprimir("\nSale del proceso de shell. Util si fué invocado por otro proceso shell.");

iFnImprimir("\nPresione Cualquier tecla para continuar, o \"s\" para salir..."); while (iCaracterLeido == -1) { iCaracterLeido = iFnLeerCaracter(&cCaracter); if(iCaracterLeido == 115) { iFnSodiumCallgate(2,0, 7); iCaracterLeido = -1; return 0; } } iCaracterLeido = -1; iFnSodiumCallgate(3,0,0);;
 iFnSodiumCallgate(2,0, 7);

}







void vFnMenuPlanif()
{
 int iN=0,iJ=0;

 while(stBuffer[iN]!=' '&&stBuffer[iN]!='\t'&&stBuffer[iN]!='\0') iN++;

 if(stBuffer[iN]!=' ') iFnImprimir("\nError de parametros\nLas opciones son aplicar, cambiar [planif], defecto, mostrar o set\n");

 iN++;

 while(stBuffer[iN] != ' ' && stBuffer[iN] != '\t' && stBuffer[iN] != '\0')
 {
  stCmd[iJ]=stBuffer[iN];
  iJ++;
  iN++;
 }
 stCmd[iJ]='\0';

 if(iFnEsCmdShell("aplicar")) iFnSodiumCallgate(20,0,1);
 else
 {
  if(iFnEsCmdShell("cambiar"))
  {
   if(stBuffer[iN] != ' ') iFnImprimir("\nError de parametros\nLas opciones son aplicar, cambiar [planif], defecto, mostrar o set\n");
   else
   {
    iJ=0;
    iN++;
    while(stBuffer[iN] != ' ' && stBuffer[iN] != '\t' && stBuffer[iN] != '\0')
    {
     stCmd[iJ]=stBuffer[iN];
     iJ++;
     iN++;
    }
    stCmd[iJ]='\0';
    if(iFnEsCmdShell("RR")) iFnSodiumCallgate(20,1,2);
    else if(iFnEsCmdShell("BTS")) iFnSodiumCallgate(20,2,2);
    else if(iFnEsCmdShell("FIFO")) iFnSodiumCallgate(20,3,2);
    else iFnImprimir("\nPlanificador incorrecto\nLas opciones son RR, BTS o FIFO\n");
   }
  }
  else
  {
   if(iFnEsCmdShell("defecto")) iFnSodiumCallgate(20,0,3);
   else
   {
    if(iFnEsCmdShell("mostrar")) iFnSodiumCallgate(20,0,4);
    else
    {
     if(iFnEsCmdShell("set"))
     {
      if(stBuffer[iN] != ' ') iFnImprimir("\nError de parametros\nEl formato es planif set [variable]=[valor]\n");
      else
      {
       iJ=0;
       iN++;
       while(stBuffer[iN]!=' '&&stBuffer[iN]!='\t'&&stBuffer[iN]!='\0')
       {
        stCmd[iJ]=stBuffer[iN];
        iJ++;
        iN++;
       }
       stCmd[iJ]='\0';
       iFnSodiumCallgate(20,(int)stCmd,5);
      }
     }
     else iFnImprimir("\nError de parametros\nLas opciones son aplicar, cambiar [planif], defecto, mostrar o set\n");
    }
   }
  }
 }
}





void vFnMenuDescUsr(int iPar)
{
 char cCaracter;
        int iCaracterLeido = -1;
 iFnSodiumCallgate(34,iPar,1);
 iFnImprimir("\nPresione Cualquier tecla para continuar, o \"s\" para salir..."); while (iCaracterLeido == -1) { iCaracterLeido = iFnLeerCaracter(&cCaracter); if(iCaracterLeido == 115) { iFnSodiumCallgate(2,0, 7); iCaracterLeido = -1; return 0; } } iCaracterLeido = -1; iFnSodiumCallgate(3,0,0);;
 iFnSodiumCallgate(34,iPar,2);
 iFnImprimir("\nPresione Cualquier tecla para continuar, o \"s\" para salir..."); while (iCaracterLeido == -1) { iCaracterLeido = iFnLeerCaracter(&cCaracter); if(iCaracterLeido == 115) { iFnSodiumCallgate(2,0, 7); iCaracterLeido = -1; return 0; } } iCaracterLeido = -1; iFnSodiumCallgate(3,0,0);;
 iFnSodiumCallgate(34,iPar,3);
 iFnImprimir("\nPresione Cualquier tecla para continuar, o \"s\" para salir..."); while (iCaracterLeido == -1) { iCaracterLeido = iFnLeerCaracter(&cCaracter); if(iCaracterLeido == 115) { iFnSodiumCallgate(2,0, 7); iCaracterLeido = -1; return 0; } } iCaracterLeido = -1; iFnSodiumCallgate(3,0,0);;
 return;
}

void vFnMenuDumpUsr(int iArg1, int iArg2)
{
 char cCaracter;
        int iCaracterLeido = -1;
 int i;
 if (iArg1 >= 0 && iArg2 > 0)
 {
  iFnImprimir("\nIniciando vuelco de memoria de %d dwords, desde %d...",iArg2,iArg1);

  for (i = 0; i < iArg2; i++) {
   iFnSodiumCallgate(23,iArg1,i);
   if (i%15 == 0 && i > 0)
   {
    iFnImprimir("\nPresione Cualquier tecla para continuar, o \"s\" para salir..."); while (iCaracterLeido == -1) { iCaracterLeido = iFnLeerCaracter(&cCaracter); if(iCaracterLeido == 115) { iFnSodiumCallgate(2,0, 7); i=iArg2; } } iCaracterLeido = -1;;
   }
  }
  iFnImprimir("\nFin");
 } else {
  iFnImprimir("\nError, argumento(s) incorrecto(s).\nForma de uso: Cmd>dump [dir mem] [intervalo]");
 }
}
# 1030 "shellusr.c"
int iFnCompletarComando(const char* stCadena)
  {
    char stTemp[2];
    int i;

    stTemp[0] = (char)8;
    stTemp[1] = '\0';

    if(iFnNumStrcmp(stBuffer,stCadena) == iCaracteresIngresados)
     {
        for(i = 0; i < iCaracteresIngresados; i++) iFnImprimir("%s",stTemp);
        iFnStrcpy(stBuffer,stCadena);
        iCaracteresIngresados = iFnStrlen(stCadena);
        iFnImprimir("%s",stCadena);
        return 1;
     }
    return 0;
  }






void vFnAutocompletar()
{

   if (iCaracteresIngresados == 0) return;

 if(iFnCompletarComando("ayuda")) return;
 if(iFnCompletarComando("bitmap")) return;
 if(iFnCompletarComando("verSem")) return;
 if(iFnCompletarComando("verShm")) return;
 if(iFnCompletarComando("check")) return;
 if(iFnCompletarComando("sysgetpid")) return;
 if(iFnCompletarComando("syswaitpid")) return;
 if(iFnCompletarComando("syskill")) return;
 if(iFnCompletarComando("planif")) return;
 if(iFnCompletarComando("lote")) return;
 if(iFnCompletarComando("log")) return;
 if(iFnCompletarComando("pcb")) return;
 if(iFnCompletarComando("leer")) return;
 if(iFnCompletarComando("idle")) return;
 if(iFnCompletarComando("reboot")) return;
 if(iFnCompletarComando("cambiateclado")) return;
 if(iFnCompletarComando("cls")) return;
 if(iFnCompletarComando("desc")) return;
 if(iFnCompletarComando("dump")) return;
 if(iFnCompletarComando("ejecutar")) return;
 if(iFnCompletarComando("stack")) return;
 if(iFnCompletarComando("execve")) return;
 if(iFnCompletarComando("exec")) return;
 if(iFnCompletarComando("gdt")) return;
 if(iFnCompletarComando("idt")) return;
 if(iFnCompletarComando("kill")) return;
 if(iFnCompletarComando("cd")) return;
 if(iFnCompletarComando("ls")) return;
 if(iFnCompletarComando("rm")) return;
 if(iFnCompletarComando("exit")) return;
 if(iFnCompletarComando("mem")) return;
 if(iFnCompletarComando("write")) return;
 if(iFnCompletarComando("pag")) return;
 if(iFnCompletarComando("yield")) return;
 if(iFnCompletarComando("interval")) return;
 if(iFnCompletarComando("fd")) return;
 if(iFnCompletarComando("ps")) return;
 if(iFnCompletarComando("segs")) return;
 if(iFnCompletarComando("set")) return;
 if(iFnCompletarComando("sumafpu")) return;
 if(iFnCompletarComando("tss")) return;
 if(iFnCompletarComando("ver")) return;
 if(iFnCompletarComando("winm")) return;
 if(iFnCompletarComando("listpart")) return;
 if(iFnCompletarComando("listporc")) return;
 if(iFnCompletarComando("borrarpf")) return;
 if(iFnCompletarComando("agregarpf")) return;
 if(iFnCompletarComando("resetpf")) return;
 if(iFnCompletarComando("listaesp")) return;
}
